package ensa.sid.rida.SID;

import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import ensa.sid.rida.SID.utile.ConnexionBD;
import ensa.sid.rida.SID.utile.ZModel;

public class ExecuterApplication extends JFrame implements Runnable {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField textField;
	JProgressBar progressBar;
	String styl = "javax.swing.plaf.metal.MetalLookAndFeel";
	JLabel LabelChemin;
	JButton btnParcourir;
	JButton btnRecherche;
	JLabel LabelRemarque;
	ZModel model;
	JLabel etat;
	int value;
	int nombre_auteur = 0;
	int nombre_pays = 0;
	int nombre_organisme = 0;
	int nombre_motCle = 0;

	public ExecuterApplication() {
		LabelChemin = new JLabel("Chemin du fichier :");
		btnParcourir = new JButton("Parcourir");
		btnRecherche = new JButton("Rechercher");
		LabelRemarque = new JLabel("(NB : fichier.txt)");
		contentPane = new JPanel();

		setTitle("Moteur de Recherche sur USPTO");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(250, 200, 677, 409);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		LabelChemin.setBounds(90, 44, 109, 14);
		contentPane.add(LabelChemin);

		textField = new JTextField();
		textField.setBounds(224, 41, 206, 20);
		contentPane.add(textField);
		textField.setColumns(10);

		btnParcourir.setBounds(440, 40, 89, 23);
		contentPane.add(btnParcourir);

		btnRecherche.setBounds(440, 90, 127, 23);
		contentPane.add(btnRecherche);

		LabelRemarque.setBounds(224, 72, 121, 14);
		contentPane.add(LabelRemarque);

		progressBar = new JProgressBar(0, 100);
		progressBar.setBounds(179, 144, 313, 20);
		progressBar.setValue(0);
		progressBar.setStringPainted(true);
		contentPane.add(progressBar);

		Object[][] donnees = { { 0, 0, 0, 0 } };
		String[] entetes = { "Auteurs", "Pays", "Organisme", "Mot Clé" };

		model = new ZModel(donnees, entetes);

		JTable tableau = new JTable(model);
		tableau.setFont(new Font("Tahoma", Font.BOLD, 11));
		tableau.setEnabled(false);
		tableau.setShowHorizontalLines(false);
		tableau.setRowSelectionAllowed(false);
		tableau.setShowGrid(false);
		tableau.setShowVerticalLines(false);

		JPanel panel = new JPanel();
		panel.setBounds(110, 258, 456, 66);

		tableau.getTableHeader().setResizingAllowed(false);
		tableau.getTableHeader().setReorderingAllowed(false);
		tableau.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		contentPane.add(panel);
		panel.add(tableau.getTableHeader());
		panel.add(tableau, BorderLayout.CENTER);

		etat = new JLabel("www.uspto.gov");
		etat.setBounds(189, 175, 241, 14);
		contentPane.add(etat);

		JMenuBar menuBar = new JMenuBar();
		JMenu test1 = new JMenu("Fichier");
		JMenu test4 = new JMenu("Style");
		JMenu test2 = new JMenu("Help");
		JMenu test3 = new JMenu("A propos");

		menuBar.add(test1);
		menuBar.add(test4);
		menuBar.add(test2);
		menuBar.add(test3);

		JMenuItem item1 = new JMenuItem("Fermer");
		JMenuItem item2 = new JMenuItem("?");
		JMenuItem item3 = new JMenuItem("Exemple fichier txt");
		JMenuItem item4 = new JMenuItem("Guide d'utilisation");
		JMenuItem item8 = new JMenuItem("Liquid");
		JMenuItem item7 = new JMenuItem("Standard");
		JMenuItem item5 = new JMenuItem("Windows");
		JMenuItem item6 = new JMenuItem("Motif");

		item2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JOptionPane.showMessageDialog(null,
						"Réalisé par : Rida Rechrache 2013/2014", "A propos",
						JOptionPane.INFORMATION_MESSAGE);
			}
		});

		test1.add(item1);
		test3.add(item2);
		test2.add(item3);
		test2.add(item4);
		test4.add(item8);
		test4.add(item7);
		test4.add(item5);
		test4.add(item6);

		item8.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				style_windows(arg0);

			}

			private void style_windows(ActionEvent arg0) {
				styl = "com.birosoft.liquid.LiquidLookAndFeel";
				style_fenetre();

			}

		});

		item7.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				style_windows(arg0);

			}

			private void style_windows(ActionEvent arg0) {
				styl = "javax.swing.plaf.metal.MetalLookAndFeel";
				style_fenetre();

			}

		});

		item5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				style_windows(arg0);

			}

			private void style_windows(ActionEvent arg0) {
				styl = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
				style_fenetre();

			}

		});

		item6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				style_windows(arg0);

			}

			private void style_windows(ActionEvent arg0) {
				styl = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
				style_fenetre();

			}

		});

		item1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);

			}
		});
		item3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Desktop desktop = Desktop.getDesktop();
				if (desktop.isSupported(Desktop.Action.BROWSE)) {
					try {
						desktop.open(new File("Fichier-Liens.txt"));
					} catch (Exception e) {
						e.printStackTrace();
					}
				}

			}
		});
		menuBar.setBounds(0, 0, 661, 21);
		contentPane.add(menuBar);

		btnParcourir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				JFileChooser ChoixFichierVel = new JFileChooser();
				ChoixFichierVel.setDialogTitle("Entrer un Fichier");
				ChoixFichierVel.setFileSelectionMode(JFileChooser.FILES_ONLY);// fichiers
																				// seulement
				ChoixFichierVel.setAcceptAllFileFilterUsed(false);// ne pas
																	// mettre de
																	// filtre de
																	// fichier
				ChoixFichierVel.setApproveButtonText("Ouvrir fichier"); // intitule
																		// du
																		// bouton

				if (ChoixFichierVel.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
					textField.setText("");
					int index = -1;
					String MonFichierVel = (ChoixFichierVel.getSelectedFile()
							.getName() != null) ? ((index = ChoixFichierVel
							.getSelectedFile().getName().lastIndexOf(".")) == -1) ? ChoixFichierVel
							.getSelectedFile().getName() : ChoixFichierVel
							.getSelectedFile().getAbsolutePath()
							: "";

					textField.setText(MonFichierVel);
				}
			}
		});

		btnRecherche.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				if (textField.getText().equals(""))

					JOptionPane.showMessageDialog(null,
							"Séléctionner un fichier.txt SVP..!!!");

				else {

					// ///////////////////////////////////////////////////////////////////////////////////////////////////
					try {

						InetAddress address = InetAddress
								.getByName("www.uspto.gov");

						if (address != null) {

							btnRecherche.setEnabled(false);

							btnParcourir.setEnabled(false);

							value = 0;
							String str = "<html>" + "<font color=\"#008000\">"
									+ "<b>" + "searching is in process......."
									+ "</b>" + "</font>" + "</html>";
							etat.setText(str);
							lanceLongTraitement();
						}
					} catch (IOException erreurConnexion) {
						// TODO Auto-generated catch block
						JOptionPane.showMessageDialog(null,
								"Pas de connexion internet...!!!");

					}

					// ///////////////////////////////////////////////////////////////////////////////////////////////////

				}
			}
		});

	}

	public void lanceLongTraitement() {
		Thread t = new Thread(this);
		t.start();
		// maintenant nous rendons la main au processus d'evenement
	}

	// methode de l'interface Runnable
	// lance un nouveau thread qui va executer le code de la methode
	// longTraitement
	public void run() {
		this.longTraitement();
	}

	public void longTraitement() { // execute la succession d'operation ...
									// on est plus dans le processus d'evenement
									// mais dans le nouveau Thread

		Thread th = new Thread() {
			public void run() {
				String fichier = textField.getText();
				lectureFichier(fichier);

			}
		};
		th.start();

		for (int i = 0; i < 100; i++) {

			this.uneOperation();
			// maintenant on appelle la methode pour mettre a jour la barre
			// de progression
			this.majProgress();

		}
	}

	// methode qui effectue une pause pour simuler une operation
	synchronized void uneOperation() {
		try {
			this.wait(100);

		} catch (InterruptedException e) {
		}
	}

	void majProgress() {
		if (SwingUtilities.isEventDispatchThread()) {
			progressBar.setValue(++value);

			if (value == 100) {
				btnRecherche.setEnabled(true);
				btnParcourir.setEnabled(true);
				textField.setText("");
				// pb.setValue(0);
				int c1 = nombre_auteur;
				int c2 = nombre_pays;
				int c3 = nombre_organisme;
				int c4 = nombre_motCle;

				final Object[][] dataBis = { { c1, c2, c3, c4 } };
				model.setData(dataBis);

				nombre_auteur = 0;
				nombre_pays = 0;
				nombre_organisme = 0;
				nombre_motCle = 0;

				String str = "<html>" + "<font color=\"#FF0000\">" + "<b>"
						+ "searching completed." + "</b>" + "</font>"
						+ "</html>";
				etat.setText(str);
			}

		} else {
			Runnable callMAJ = new Runnable() {
				public void run() {
					majProgress();

				}
			};

			SwingUtilities.invokeLater(callMAJ);
		}
	}

	void lectureFichier(String fichier) {

		Document doc;
		try {
			InputStream ips = new FileInputStream(fichier);
			InputStreamReader ipsr = new InputStreamReader(ips);
			BufferedReader br = new BufferedReader(ipsr);
			String ligne;

			List<String> lisConjonction = new ArrayList<String>();
			lisConjonction.add("and");
			lisConjonction.add("if");
			lisConjonction.add("as");
			lisConjonction.add("that");
			lisConjonction.add("else");
			lisConjonction.add("of");
			lisConjonction.add("the");
			lisConjonction.add("in");
			lisConjonction.add("for");
			int sizeOfTheShortestList = lisConjonction.size();
			int nombre_brevet = 0;
			List<String> listCodePays = new ArrayList<String>();
			ConnexionBD c = new ConnexionBD();

			// LineNumberReader l = new LineNumberReader(
			// new BufferedReader(new InputStreamReader(ips)));
			// while ((ligne=l.readLine())!=null)
			// {
			// nombre_lien = l.getLineNumber();
			// }
			// // System.out.println(nombre_lien);

			while ((ligne = br.readLine()) != null) {

				doc = Jsoup.connect(ligne).get();
				nombre_brevet++;

				System.out
						.println("----------------------------------------------brevet N°"
								+ nombre_brevet
								+ "------------------------------------------------");

				// Titre de brevet
				// /////////////////////////////////////////
				Elements motCle = doc.select("body>font");
				StringBuffer strMotCle = new StringBuffer(motCle.text());

				Elements select_dateBrevet = doc.select("body>table>tbody");
				Element ele1 = select_dateBrevet.select("tr").get(3);
				Element ele2 = ele1.select("td").get(1);

				String mois = ele2.text()
						.substring(0, ele2.text().indexOf(" ")).trim();
				String jour = ele2
						.text()
						.substring(ele2.text().indexOf(" "),
								ele2.text().indexOf(",")).trim();
				String annee = ele2
						.text()
						.substring(ele2.text().length() - 4,
								ele2.text().length()).trim();
				String[] tabMois = { "January", "February", " March", "April",
						"May", "June", "July", "August", "September",
						"October", "November", "December" };

				String[] tabS = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
						"10", "11", "12" };
				int moisChiffre = 0;
				for (int i = 0; i < tabMois.length; i++) {

					if (tabMois[i].equals(mois)) // System.out.println("date brevet :"+(i+1));
						moisChiffre = i + 1;

				}

				String dateBrevet = annee + "-" + moisChiffre + "-" + jour;
				System.out.println("date publication de brevet :" + dateBrevet);
				String sMotCle = (strMotCle + " ").toLowerCase();
				System.out.println("->Titre :" + sMotCle);

				String reqTestTable1 = "select * from brevet";
				boolean l1 = c.testTableVide(reqTestTable1);

				String reqTitre;

				if (l1 == false) {
					//System.out.println("table vide");
					reqTitre = "INSERT INTO brevet(titre,date) value('"
							+ sMotCle + "','" + dateBrevet + "')";
					c.ajouter(reqTitre);
				} else {
				//	System.out.println("table pas vide");
					reqTitre = "INSERT INTO brevet(titre,date) SELECT '"
							+ sMotCle
							+ "','"
							+ dateBrevet
							+ "' "
							+ " FROM brevet WHERE NOT EXISTS(SELECT titre,date FROM brevet WHERE titre='"
							+ sMotCle + "' and date='" + dateBrevet
							+ "' ) limit 1";
					c.ajouter(reqTitre);

				}

				String requet_id_bre = "select * from brevet where titre='"
						+ sMotCle + "' and date='" + dateBrevet + "'";

				int id_bre = c.findById(requet_id_bre);

			//	System.out.println("id motClé " + id_bre);

				Pattern patternMotCle = Pattern.compile("(.*?) ");
				Matcher mMotCle = patternMotCle.matcher(sMotCle);
				while (mMotCle.find()) {

					if (!lisConjonction.contains(mMotCle.group(1))) {
						System.out.println("             mot cle :"
								+ mMotCle.group(1));

						String reqTestTable2 = "select * from motcle";
						boolean l2 = c.testTableVide(reqTestTable2);
						String reqMotCle;

						if (l2 == false) {
							reqMotCle = "insert into motcle(contenu) value('"
									+ mMotCle.group(1) + "')";
							c.ajouter(reqMotCle);
						} else {
							reqMotCle = "insert into motcle(contenu)  SELECT '"
									+ mMotCle.group(1)
									+ "'  FROM motcle "
									+ "WHERE NOT EXISTS(SELECT contenu FROM motcle WHERE contenu='"
									+ mMotCle.group(1) + "' ) limit 1";
							c.ajouter(reqMotCle);
						}

						String requete_id_mc = "select * from motcle where contenu='"
								+ mMotCle.group(1) + "' ";
						int id_mc = c.findById(requete_id_mc);

						String reqTestTable3 = "select * from contenir";
						boolean l3 = c.testTableVide(reqTestTable3);
						String reqContenir;
						if (l3 == false) {
							reqContenir = "insert into contenir(id_bre,id_mc) value("
									+ id_bre + "," + id_mc + ")";
							c.ajouter(reqContenir);
						} else {
							reqContenir = "insert into contenir(id_bre,id_mc) select "
									+ id_bre
									+ ","
									+ id_mc
									+ "  FROM contenir "
									+ "WHERE NOT EXISTS(SELECT id_bre,id_mc FROM contenir WHERE id_bre="
									+ id_bre
									+ " and id_mc="
									+ id_mc
									+ " ) limit 1 ";
							// System.out.println("okkkkkkk");
							c.ajouter(reqContenir);
						}

						nombre_motCle++;
					}
				}

				// ////////////////////////////////////

				// les auteurs et les pays
				Element Inventors = doc.select("td:contains(Inventors:) + td")
						.first();

				List<Integer> listIdPays = new ArrayList<Integer>();

				// nombre_pays = listCodePays..size();

				List<String> v = new ArrayList<String>();

				for (int i = 0; i < listCodePays.size(); i++) {

					if (!v.contains(listCodePays.get(i))) {
						v.add(listCodePays.get(i));
					}

				}

				nombre_pays = v.size();
				int requete_id_pays1;

				List<String> listNom = new ArrayList<String>();
				List<String> listPrenom = new ArrayList<String>();

				System.out.println("->Auteurs :" + Inventors.text());

				for (Element link : Inventors.children()) {
					Elements auteur = link.select("b");
					Elements pays = link.select("i");

					if (!pays.text().equals("")) {

						String extrairePays = pays.text().substring(
								pays.text().indexOf(",") + 1,
								pays.text().length() - 1);
						String enleverEspace = extrairePays.trim();

						listCodePays.add(enleverEspace);

					}

					if (!auteur.text().equals("")) {

						String enleverPointVirgule = auteur.text().replaceAll(
								";", "");
						String structure = enleverPointVirgule.trim();
						String prenom = structure.substring(0,
								structure.indexOf(" "));
						String nom = structure.substring(
								structure.indexOf(" ") + 1, structure.length());
						System.out.println("                  nom :"
								+ prenom + "  prenom:" + nom);

						listNom.add(nom);
						listPrenom.add(prenom);

						nombre_auteur++;
					}

				}

				String reqTestTable6 = "select * from inventeur";
				boolean l6 = c.testTableVide(reqTestTable6);
				String req_inventeur;

				Iterator<String> i1 = listCodePays.iterator();
				Iterator<String> i2 = listNom.iterator();
				Iterator<String> i3 = listPrenom.iterator();
				while (i2.hasNext()) {
					String code1 = i1.next();
					String nom1 = i2.next();
					String prenom1 = i3.next();

					System.out.println(" Pays :" + code1);
					requete_id_pays1 = c
							.findById("select id_pay  from pays where code='"
									+ code1 + "' ");

					if (l6 == false) {
						req_inventeur = "INSERT INTO inventeur(id_pay,nom,prenom) value("
								+ requete_id_pays1
								+ ",'"
								+ nom1
								+ "','"
								+ prenom1 + "')";
						c.ajouter(req_inventeur);
					} else {

						req_inventeur = "INSERT INTO inventeur(id_pay,nom,prenom) SELECT "
								+ requete_id_pays1
								+ ",'"
								+ nom1
								+ "','"
								+ prenom1
								+ "'  FROM inventeur "
								+ "WHERE NOT EXISTS(SELECT id_pay,nom,prenom FROM inventeur"
								+ " WHERE prenom='"
								+ prenom1
								+ "' and nom='"
								+ nom1
								+ "' and id_pay="
								+ requete_id_pays1
								+ ") limit 1";
						c.ajouter(req_inventeur);

					}

					int id_inventeur = c
							.findById("select id_inv  from inventeur where nom='"
									+ nom1
									+ "' and prenom='"
									+ prenom1
									+ "' and id_pay=" + requete_id_pays1 + "");
					String reqTestTable7 = "select * from realiser";
					boolean l7 = c.testTableVide(reqTestTable7);
					String req_realiser;

					if (l7 == false) {
						req_realiser = "insert into realiser(id_bre,id_inv) value("
								+ id_bre + "," + id_inventeur + ")";
						c.ajouter(req_realiser);
					} else {
						req_realiser = "insert into realiser(id_bre,id_inv) select "
								+ id_bre
								+ ","
								+ id_inventeur
								+ "  "
								+ "FROM realiser WHERE NOT EXISTS(SELECT id_bre,id_inv FROM realiser WHERE id_bre="
								+ id_bre
								+ " and id_inv="
								+ id_inventeur
								+ "   ) limit 1 ";
						c.ajouter(req_realiser);
					}

				}

				// l'organisme de brevet
				/**********************************************/
				Elements Assignee = doc.select("td:contains(Assignee:) + td")
						.select("b");
				List<String> listOrg = new ArrayList<String>();
				List<String> listPaysOrg = new ArrayList<String>();
				// Elements organismeLien = Assignee.select("b");

				// System.out.println("->organisme :" + Assignee.text());
				int index;
				for (index = 0; index < Assignee.size(); index = index + 3) {
					System.out.println("->organisme :"
							+ Assignee.get(index).text().toUpperCase());
					listOrg.add(Assignee.get(index).text());

					if (Assignee.get(index + 2).text().length() == 2) {
						listPaysOrg.add(Assignee.get(index + 2).text());

						System.out.println("            pays :"
								+ Assignee.get(index + 2).text());
					}

				}
				nombre_organisme = nombre_organisme + listOrg.size();
				Iterator<String> i4 = listOrg.iterator();
				Iterator<String> i5 = listPaysOrg.iterator();
				int id_Pays;
				while (i4.hasNext()) {
					String org = i4.next();
					String code2 = i5.next();

					id_Pays = c
							.findById("select id_pay  from pays where code='"
									+ code2 + "' ");

					String reqTestTable4 = "select * from organisme where libelle='"
							+ org + "' and  id_pay=" + id_Pays + "";
					boolean l4 = c.testTableVide(reqTestTable4);
					String reqAssignee;
					if (l4 == false) {
						reqAssignee = "insert into organisme(id_pay,libelle) value("
								+ id_Pays + ",'" + org + "')";
						c.ajouter(reqAssignee);
					} else {
						reqAssignee = "insert into organisme(id_pay,libelle) SELECT "
								+ id_Pays
								+ " ,'"
								+ org
								+ "' FROM organisme "
								+ "WHERE NOT EXISTS(SELECT id_pay,libelle FROM organisme WHERE  id_pay="
								+ id_Pays
								+ " and libelle='"
								+ org
								+ "') limit 1";

						c.ajouter(reqAssignee);
					}

					String reqTestTable5 = "select * from concerner";
					boolean l5 = c.testTableVide(reqTestTable5);
					String req_concerner;
					int id_org = c
							.findById("select id_org from organisme where libelle='"
									+ org + "' and  id_pay=" + id_Pays + "");
					if (l5 == false) {

						req_concerner = "insert into concerner(id_bre,id_org) value("
								+ id_bre + "," + id_org + ")";
						c.ajouter(req_concerner);

					}

					else {

						req_concerner = "insert into concerner(id_bre,id_org) select "
								+ id_bre
								+ ","
								+ id_org
								+ "  FROM "
								+ "concerner WHERE NOT EXISTS(SELECT id_bre,id_org FROM concerner WHERE"
								+ " id_bre="
								+ id_bre
								+ " and id_org="
								+ id_org
								+ "  ) limit 1 ";

						c.ajouter(req_concerner);

					}

				}

			}

			br.close();
			c.fermer();
			System.out
					.println("-------------------------------------------------------------------------------------------------------------");

			System.out.println("Nombre d'auteur dans ce fichier :"
					+ nombre_auteur);
			System.out
					.println("Nombre de pays dans ce fichier :" + nombre_pays);
			System.out.println("Nombre d'organisme dans ce fichier :"
					+ nombre_organisme);
			System.out.println("Nombre de mot clé dans ce fichier :"
					+ nombre_motCle);
		} catch (Exception e) {
			System.out.println(e.toString());
		}

	}

	private void style_fenetre() {
		try {

			UIManager.setLookAndFeel(styl);

			SwingUtilities.updateComponentTreeUI(this);
		} catch (Exception erreur) {

			JOptionPane.showMessageDialog(null, erreur);
		}

	}

	public static void main(String[] args) {

		EventQueue.invokeLater(new Runnable() {
			public void run() {

				try {

					ExecuterApplication frame = new ExecuterApplication();

					frame.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}

			}
		});
	}
}
